
#include "Public.h"


#define ADC1_DR_Address    0x40012440
__IO uint16_t RegularConvData_Tab[2];

static void ADC_single_Config(void)
{
  ADC_InitTypeDef     ADC_InitStructure;

  
  // GPIOC Periph clock enable 
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  
  // ADC1 Periph clock enable 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  
  
//在gpio 配置时已经配置了
//  GPIO_InitTypeDef    GPIO_InitStructure;  
  
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 ;
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
//  GPIO_Init(GPIOA, &GPIO_InitStructure);


  
  // ADCs DeInit  
  ADC_DeInit(ADC1);
  
  // Initialize ADC structure 
  ADC_StructInit(&ADC_InitStructure);
  
  // Configure the ADC1 in continuous mode with a resolution equal to 12 bits  
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //ENABLE; 
 
   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //None表示软件触发 
 // ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING//--ADC_ExternalTrigConvEdge_None;  
 // ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;//--
                           
  ADC_InitStructure.ADC_DataAlign     = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
  ADC_Init(ADC1, &ADC_InitStructure); 
  
  // Convert the ADC1 Channel 0 with 239.5 Cycles as sampling time 
  ADC_ChannelConfig(ADC1, ADC_Channel_3 , ADC_SampleTime_13_5Cycles);
  ADC_ChannelConfig(ADC1, ADC_Channel_4 , ADC_SampleTime_13_5Cycles);
  ADC_ChannelConfig(ADC1, ADC_Channel_5 , ADC_SampleTime_13_5Cycles);
  ADC_ChannelConfig(ADC1, ADC_Channel_6 , ADC_SampleTime_13_5Cycles);  
  
  
  
  //ADC Calibration 
  ADC_GetCalibrationFactor(ADC1);
  
  // Enable the ADC peripheral 
  ADC_Cmd(ADC1, ENABLE);     
  
  // Wait the ADRDY flag 
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY)); 
  
  // ADC1 regular Software Start Conv  
  ADC_StartOfConversion(ADC1);
  
}

/*
static void ADC_Config(void)
{
  ADC_InitTypeDef     ADC_InitStructure;
  GPIO_InitTypeDef    GPIO_InitStructure;
  // ADC1 DeInit  
  ADC_DeInit(ADC1);
  
  // GPIOC Periph clock enable 
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  
   // ADC1 Periph clock enable 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 ;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  
  //Initialize ADC structure 
  ADC_StructInit(&ADC_InitStructure);
  
  // Configure the ADC1 in continuous mode withe a resolution equal to 12 bits  
  ADC_InitStructure.ADC_Resolution =ADC_Resolution_10b; //ADC_Resolution_12b;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; 
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//ADC_ExternalTrigConvEdge_Rising
   // ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;//--
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Backward;
  ADC_Init(ADC1, &ADC_InitStructure); 

  // Convert the ADC1 Channel11 and channel10 with 55.5 Cycles as sampling time 
  ADC_ChannelConfig(ADC1, ADC_Channel_0 , ADC_SampleTime_55_5Cycles); 

  
  // Convert the ADC1 temperature sensor  with 55.5 Cycles as sampling time 
 // ADC_ChannelConfig(ADC1, ADC_Channel_TempSensor , ADC_SampleTime_55_5Cycles);  
 // ADC_TempSensorCmd(ENABLE);
  
  //Convert the ADC1 Vref  with 55.5 Cycles as sampling time 
  ADC_ChannelConfig(ADC1, ADC_Channel_1 , ADC_SampleTime_55_5Cycles); 
  ADC_VrefintCmd(ENABLE);
  
  // Convert the ADC1 Vbat with 55.5 Cycles as sampling time 
  ADC_ChannelConfig(ADC1, ADC_Channel_Vbat , ADC_SampleTime_55_5Cycles);  
  ADC_VbatCmd(ENABLE);
  
  // ADC Calibration 
  ADC_GetCalibrationFactor(ADC1);
  
  //ADC DMA request in circular mode 
  ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);
  
  // Enable ADC_DMA 
  ADC_DMACmd(ADC1, ENABLE);  
  
  // Enable the ADC peripheral 
  ADC_Cmd(ADC1, ENABLE);     
  
  // Wait the ADRDY flag 
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY)); 
  
  //ADC1 regular Software Start Conv 
  ADC_StartOfConversion(ADC1); 
  
  
}
*/
/*
static void DMA_Config(void)
{
  DMA_InitTypeDef   DMA_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure ={0}; 
 // RCC->CFGR3 |=  1<<8; //
  // DMA1 clock enable 
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);
  //--
                    // 设置中断组为 0 
  NVIC_InitStructure.NVIC_IRQChannel          = DMA1_Channel1_IRQn; // 设置中断来源   
  NVIC_InitStructure.NVIC_IRQChannelPriority  = 1;            // 设置子优先级
  NVIC_InitStructure.NVIC_IRQChannelCmd       = ENABLE;
  NVIC_Init(&NVIC_InitStructure); 
  //--- 
  
  //DMA1 Channel1 Config 
  DMA_DeInit(DMA1_Channel1);
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RegularConvData_Tab;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStructure.DMA_BufferSize = 2;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_Mode_Normal;  //DMA_M2M_Disable;
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  
  DMA1_Channel1->CCR |= 2;
  //- DMA1 Channel1 enable -
  DMA_Cmd(DMA1_Channel1, ENABLE);
  
}
*/
void Init_ADC_Config(void)
{
  
 // ADC_Config();
 // DMA_Config();
  
  ADC_single_Config();
  
}